9ef70f
@@ -36,6 +36,7 @@
 import org.apache.hadoop.hive.ql.metadata.InvalidTableException;
 import org.apache.hadoop.hive.ql.metadata.Table;
 import org.apache.hadoop.hive.ql.session.SessionState;
+import org.apache.hadoop.hive.serde.serdeConstants;
 
 /**
  * ColumnStatsSemanticAnalyzer.
@@ -186,15 +187,7 @@
private StringBuilder genPartitionClause(Map<String,String> partSpec) throws Sem
         } else {
           whereClause.append(" and ");
         }
-        whereClause.append(partKey);
-        whereClause.append(" = ");
-        if (getColTypeOf(partKey).equalsIgnoreCase("string")) {
-          whereClause.append("'");
-        }
-        whereClause.append(value);
-        if (getColTypeOf(partKey).equalsIgnoreCase("string")) {
-          whereClause.append("'");
-        }
+        whereClause.append(partKey).append(" = ").append(genPartValueString(partKey, value));
       }
     }
 
@@ -211,11 +204,39 @@
private StringBuilder genPartitionClause(Map<String,String> partSpec) throws Sem
     return predPresent ? whereClause.append(groupByClause) : groupByClause;
   }
 
+  private String genPartValueString (String partKey, String partVal) throws SemanticException {
+    String returnVal = partVal;
+    String partColType = getColTypeOf(partKey);
+    if (partColType.equals(serdeConstants.STRING_TYPE_NAME) ||
+        partColType.contains(serdeConstants.VARCHAR_TYPE_NAME) ||
+        partColType.contains(serdeConstants.CHAR_TYPE_NAME)) {
+      returnVal = "'" + partVal + "'";
+    } else if (partColType.equals(serdeConstants.TINYINT_TYPE_NAME)) {
+      returnVal = partVal+"Y";
+    } else if (partColType.equals(serdeConstants.SMALLINT_TYPE_NAME)) {
+      returnVal = partVal+"S";
+    } else if (partColType.equals(serdeConstants.INT_TYPE_NAME)) {
+      returnVal = partVal;
+    } else if (partColType.equals(serdeConstants.BIGINT_TYPE_NAME)) {
+      returnVal = partVal+"L";
+    } else if (partColType.contains(serdeConstants.DECIMAL_TYPE_NAME)) {
+      returnVal = partVal + "BD";
+    } else if (partColType.equals(serdeConstants.DATE_TYPE_NAME) ||
+        partColType.equals(serdeConstants.TIMESTAMP_TYPE_NAME)) {
+      returnVal = partColType + " '" + partVal + "'";
+    } else {
+      //for other usually not used types, just quote the value
+      returnVal = "'" + partVal + "'";
+    }
+    
+    return returnVal;
+  }
+  
   private String getColTypeOf (String partKey) throws SemanticException{
 
     for (FieldSchema fs : tbl.getPartitionKeys()) {
       if (partKey.equalsIgnoreCase(fs.getName())) {
-        return fs.getType();
+        return fs.getType().toLowerCase();
       }
     }
     throw new SemanticException ("Unknown partition key : " + partKey);
